C.S.Burner 🪙 ━►🔥GIT Node
Node / reticulum_mirror / MeshChatX / files / meshchatx / src / frontend / components / messages / ConversationPeerHeader.vue
Displaying Raw • Download
meshchatx/src/frontend/components/messages/ConversationPeerHeader.vue 9ec2a88817819d433c5d68dbec0ca070ca989b91 (9ec2a888) Text, 7.56 KB
T8b949e<!-- SPDX-License-Identifier: 0BSD -->
Tff7b72<templateTff7b72>
Tff7b72<div
Te6edf3class=Ta5d6ff"relative z-20 flex flex-wrap items-center gap-y-2 px-3 sm:px-4 py-3 border-b border-gray-200 dark:border-zinc-800 bg-white dark:bg-zinc-950"
Tff7b72>
Tff7b72<div Te6edf3class=Ta5d6ff"flex-shrink-0 mr-3"Tff7b72>
Tff7b72<LxmfUserIcon
Te6edf3:custom-image=Ta5d6ff"selectedPeer.contact_image"
Te6edf3:icon-name=Ta5d6ff"selectedPeer.lxmf_user_icon ? selectedPeer.lxmf_user_icon.icon_name : ''"
Te6edf3:icon-foreground-colour=Ta5d6ff"
selectedPeer.lxmf_user_icon ? selectedPeer.lxmf_user_icon.foreground_colour : ''
"
Te6edf3:icon-background-colour=Ta5d6ff"
selectedPeer.lxmf_user_icon ? selectedPeer.lxmf_user_icon.background_colour : ''
"
Te6edf3icon-class=Ta5d6ff"shrink-0"
Te6edf3:icon-style=Ta5d6ff"messageIconStyle"
Tff7b72/>
Tff7b72</div>
Tff7b72<div Te6edf3class=Ta5d6ff"min-w-0 flex-1"Tff7b72>
Tff7b72<div Te6edf3class=Ta5d6ff"flex items-center cursor-pointer min-w-0 group" @Te6edf3click=Ta5d6ff"$emit('edit-display-name')"Tff7b72>
Tff7b72<div
Te6edf3v-if=Ta5d6ff"selectedPeer.custom_display_name != null"
Te6edf3class=Ta5d6ff"mr-1.5 text-gray-500 dark:text-zinc-400 group-hover:text-gray-700 dark:group-hover:text-zinc-200 transition-colors"
Te6edf3:title=Ta5d6ff"$t('messages.custom_display_name')"
Tff7b72>
Tff7b72<MaterialDesignIcon Te6edf3icon-name=Ta5d6ff"tag-outline" Te6edf3class=Ta5d6ff"size-4" Tff7b72/>
Tff7b72</div>
Tff7b72<div
Te6edf3class=Ta5d6ff"font-semibold text-gray-900 dark:text-zinc-100 truncate max-w-[120px] sm:max-w-sm text-base"
Te6edf3:title=Ta5d6ff"selectedPeer.custom_display_name ?? selectedPeer.display_name"
Tff7b72>
Tff7b72{{ Te6edf3selectedPeerTe6edf3.custom_display_name ?? Te6edf3selectedPeerTe6edf3.display_name Tff7b72}}
Tff7b72</div>
Tff7b72</div>
Tff7b72<div Te6edf3class=Ta5d6ff"text-xs text-gray-500 dark:text-zinc-400 mt-0.5 flex items-center gap-2 min-w-0"Tff7b72>
Tff7b72<div
Te6edf3class=Ta5d6ff"cursor-pointer hover:text-blue-500 transition-colors truncate max-w-[120px] sm:max-w-none shrink-0"
Te6edf3:title=Ta5d6ff"selectedPeer.destination_hash"
@Te6edf3click=Ta5d6ff"$emit('copy-hash', selectedPeer.destination_hash)"
Tff7b72>
Tff7b72{{ Te6edf3destinationDisplay Tff7b72}}
Tff7b72</div>
Tff7b72<div
Te6edf3v-if=Ta5d6ff"
selectedPeerPath ||
selectedPeerSignalMetrics?.snr != null ||
selectedPeerLxmfStampInfo?.stamp_cost
"
Te6edf3class=Ta5d6ff"flex items-center gap-2 min-w-0"
Tff7b72>
Tff7b72<span Te6edf3class=Ta5d6ff"text-gray-300 dark:text-zinc-700 shrink-0"Tff7b72>•Tff7b72</span>
Tff7b72<div Te6edf3class=Ta5d6ff"flex items-center gap-2 truncate"Tff7b72>
Tff7b72<span
Te6edf3v-if=Ta5d6ff"selectedPeerPath"
Te6edf3class=Ta5d6ff"flex items-center cursor-pointer hover:text-gray-700 dark:hover:text-zinc-200 shrink-0"
Te6edf3title=Ta5d6ff"Path information"
@Te6edf3click=Ta5d6ff"$emit('destination-path-click', selectedPeerPath)"
Tff7b72>
Tff7b72<span Te6edf3v-if=Ta5d6ff"selectedPeerPath.hops === 0 || selectedPeerPath.hops === 1"Tff7b72>Tff7b72{{
$Te6edf3tTff7b72(Ta5d6ff"messages.direct"Tff7b72)
Tff7b72}}Tff7b72</span>
Tff7b72<span v-elseTff7b72>Tff7b72{{ $Te6edf3tTff7b72(Ta5d6ff"messages.hops_away"Tff7b72, Tff7b72{ Te6edf3countTff7b72: Te6edf3selectedPeerPathTe6edf3.hops Tff7b72}Tff7b72) Tff7b72}}Tff7b72</span>
Tff7b72</span>
Tff7b72<span Te6edf3v-if=Ta5d6ff"selectedPeerSignalMetrics?.snr != null" Te6edf3class=Ta5d6ff"flex items-center gap-2 shrink-0"Tff7b72>
Tff7b72<span Te6edf3class=Ta5d6ff"text-gray-300 dark:text-zinc-700 opacity-50"Tff7b72>•Tff7b72</span>
Tff7b72<span
Te6edf3class=Ta5d6ff"cursor-pointer hover:text-gray-700 dark:hover:text-zinc-200"
Te6edf3title=Ta5d6ff"Signal quality"
@Te6edf3click=Ta5d6ff"$emit('signal-metrics-click', selectedPeerSignalMetrics)"
Tff7b72>Tff7b72{{ $Te6edf3tTff7b72(Ta5d6ff"messages.snr"Tff7b72, Tff7b72{ Te6edf3snrTff7b72: Te6edf3selectedPeerSignalMetricsTe6edf3.snr Tff7b72}Tff7b72) Tff7b72}}Tff7b72</span
>
Tff7b72</span>
Tff7b72<span Te6edf3v-if=Ta5d6ff"selectedPeerLxmfStampInfo?.stamp_cost" Te6edf3class=Ta5d6ff"flex items-center gap-2 shrink-0"Tff7b72>
Tff7b72<span Te6edf3class=Ta5d6ff"text-gray-300 dark:text-zinc-700 opacity-50"Tff7b72>•Tff7b72</span>
Tff7b72<span
Te6edf3class=Ta5d6ff"cursor-pointer hover:text-gray-700 dark:hover:text-zinc-200"
Te6edf3title=Ta5d6ff"LXMF stamp requirement"
@Te6edf3click=Ta5d6ff"$emit('stamp-info-click', selectedPeerLxmfStampInfo)"
Tff7b72>Tff7b72{{ $Te6edf3tTff7b72(Ta5d6ff"messages.stamp_cost"Tff7b72, Tff7b72{ Te6edf3costTff7b72: Te6edf3selectedPeerLxmfStampInfoTe6edf3.stamp_cost Tff7b72}Tff7b72) Tff7b72}}Tff7b72</span
>
Tff7b72</span>
Tff7b72</div>
Tff7b72</div>
Tff7b72</div>
Tff7b72</div>
Tff7b72<div Te6edf3class=Ta5d6ff"ml-auto flex items-center gap-0.5 sm:gap-1.5 min-w-0 shrink-0"Tff7b72>
Tff7b72<ConversationDropDownMenu
Te6edf3v-if=Ta5d6ff"selectedPeer"
Te6edf3:peer=Ta5d6ff"selectedPeer"
Te6edf3:compact=Ta5d6ff"compactPeerActions"
Te6edf3:has-failed-messages=Ta5d6ff"hasFailedOrCancelledMessages"
@Te6edf3conversation-deleted=Ta5d6ff"$emit('conversation-deleted')"
@Te6edf3set-custom-display-name=Ta5d6ff"$emit('edit-display-name')"
@Te6edf3popout=Ta5d6ff"$emit('popout')"
@Te6edf3retry-failed=Ta5d6ff"$emit('retry-failed')"
@Te6edf3open-telemetry-history=Ta5d6ff"$emit('open-telemetry-history')"
@Te6edf3start-call=Ta5d6ff"$emit('start-call')"
@Te6edf3share-contact=Ta5d6ff"$emit('share-contact')"
Tff7b72/>
Tff7b72<IconButton Te6edf3title=Ta5d6ff"Close" Te6edf3class=Ta5d6ff"shrink-0" @Te6edf3click=Ta5d6ff"$emit('close')"Tff7b72>
Tff7b72<MaterialDesignIcon Te6edf3icon-name=Ta5d6ff"close" Te6edf3class=Ta5d6ff"size-6 sm:size-7" Tff7b72/>
Tff7b72</IconButton>
Tff7b72</div>
Tff7b72</div>
Tff7b72</template>
Tff7b72<scriptTff7b72>
import Utils from "../../js/Utils";
import MaterialDesignIcon from "../MaterialDesignIcon.vue";
import IconButton from "../IconButton.vue";
import LxmfUserIcon from "../LxmfUserIcon.vue";
import ConversationDropDownMenu from "./ConversationDropDownMenu.vue";
export default {
name: "ConversationPeerHeader",
components: {
MaterialDesignIcon,
IconButton,
LxmfUserIcon,
ConversationDropDownMenu,
},
props: {
selectedPeer: {
type: Object,
required: true,
},
compactPeerActions: {
type: Boolean,
default: false,
},
hasFailedOrCancelledMessages: {
type: Boolean,
default: false,
},
messageIconStyle: {
type: Object,
default: () => ({}),
},
selectedPeerPath: {
type: Object,
default: null,
},
selectedPeerSignalMetrics: {
type: Object,
default: null,
},
selectedPeerLxmfStampInfo: {
type: Object,
default: null,
},
},
emits: [
"edit-display-name",
"copy-hash",
"destination-path-click",
"signal-metrics-click",
"stamp-info-click",
"conversation-deleted",
"popout",
"retry-failed",
"open-telemetry-history",
"start-call",
"share-contact",
"close",
],
computed: {
destinationDisplay() {
return Utils.formatDestinationHash(this.selectedPeer?.destination_hash);
},
},
};
Tff7b72</script>
Served by rngit 1.5.2 - Generated in 0.06s